www.gusucode.com > PHPBB轻型PHP论坛 含中文语言包 3.1.2PHP源码程序 > PHPBB轻型PHP论坛 含中文语言包 3.1.2/mandarin_chinese_(simplified_script)_1_0_4/phpBB3/vendor/lusitanian/oauth/src/OAuth/Common/Http/Client/StreamClient.php

    <?php
namespace OAuth\Common\Http\Client;

use OAuth\Common\Http\Exception\TokenResponseException;
use OAuth\Common\Http\Uri\UriInterface;

/**
 * Client implementation for streams/file_get_contents
 */
class StreamClient extends AbstractClient
{
    /**
     * Any implementing HTTP providers should send a request to the provided endpoint with the parameters.
     * They should return, in string form, the response body and throw an exception on error.
     *
     * @param UriInterface $endpoint
     * @param mixed $requestBody
     * @param array $extraHeaders
     * @param string $method
     * @return string
     * @throws TokenResponseException
     * @throws \InvalidArgumentException
     */
    public function retrieveResponse(UriInterface $endpoint, $requestBody, array $extraHeaders = array(), $method = 'POST')
    {
        // Normalize method name
        $method = strtoupper($method);

        $this->normalizeHeaders($extraHeaders);

        if( $method === 'GET' && !empty($requestBody) ) {
            throw new \InvalidArgumentException('No body expected for "GET" request.');
        }

        if( !isset($extraHeaders['Content-type'] ) && $method === 'POST' && is_array($requestBody) ) {
            $extraHeaders['Content-type'] = 'Content-type: application/x-www-form-urlencoded';
        }

        $extraHeaders['Host'] = 'Host: '.$endpoint->getHost();
        $extraHeaders['Connection'] = 'Connection: close';

        if( is_array($requestBody) ) {
            $requestBody = http_build_query($requestBody, null, '&');
        }

        $context = $this->generateStreamContext($requestBody, $extraHeaders, $method);

        $level = error_reporting(0);
        $response = file_get_contents($endpoint->getAbsoluteUri(), false, $context);
        error_reporting($level);
        if( false === $response ) {
            $lastError = error_get_last();
            if (is_null($lastError))
                throw new TokenResponseException( 'Failed to request resource.' );
            throw new TokenResponseException( $lastError['message'] );
        }

        return $response;
    }

    private function generateStreamContext($body, $headers, $method)
    {
        return stream_context_create(array(
            'http' => array(
                'method'           => $method,
                'header'           => array_values($headers),
                'content'          => $body,
                'protocol_version' => '1.1',
                'user_agent'       => 'Lusitanian OAuth Client',
                'max_redirects'    => $this->maxRedirects,
                'timeout'          => $this->timeout
            ),
        ));
    }
}